perm filename GFTOPC.PSC[MF,ALS] blob
sn#762569 filedate 1984-07-27 generic text, type T, neo UTF8
{4:}{$D-,W+}{$D+}PROGRAM GFTOPXL(GFFILE,PXLFILE);LABEL{5:}9999;{:5}
CONST{6:}LINELENGTH=79;TERMINALLINE=150;MAXGLYPHNO=127;TOPPIXEL=300;
BOTPIXEL=-90;LEFTPIXEL=-150;RIGHTPIXEL=300;{:6}TYPE{12:}
ASCIICODE=32..126;{:12}{13:}TEXTFILE=PACKED FILE OF CHAR;{:13}{24:}
EIGHTBITS=0..255;BYTEFILE=PACKED FILE OF EIGHTBITS;{:24}{33:}
XCOORD=LEFTPIXEL..RIGHTPIXEL;YCOORD=BOTPIXEL..TOPPIXEL;{:33}{35:}
PIXEL=0..1;{:35}VAR{10:}BUFFER:ARRAY[0..TERMINALLINE]OF ASCIICODE;{:10}
{14:}XORD:ARRAY[CHAR]OF ASCIICODE;XCHR:ARRAY[0..255]OF CHAR;{:14}{25:}
GFFILE:BYTEFILE;PXLFILE:BYTEFILE;{:25}{28:}CURLOC:INTEGER;
PXLBYTENO:INTEGER;{:28}{34:}X,Z:XCOORD;Y:YCOORD;PAINTSWITCH:PIXEL;{:34}
{36:}IMAGEARRAY:PACKED ARRAY[YCOORD,XCOORD]OF PIXEL;{:36}{39:}
CHARCODE:INTEGER;TOTALCHARS:INTEGER;{:39}{52:}COLS,ROWS:INTEGER;
NUMBYTES:INTEGER;{:52}{54:}DESIGNSIZE:INTEGER;
MINX,MAXX,MINY,MAXY:INTEGER;HPPP,VPPP:INTEGER;CHECKSUM:INTEGER;
POSTLOC:INTEGER;MAGNIFICATIO:REAL;
TFMWIDTH:ARRAY[0..MAXGLYPHNO]OF INTEGER;
DEVICEWIDTH:ARRAY[0..MAXGLYPHNO]OF INTEGER;{:54}{59:}
GLYPHPTR:ARRAY[0..MAXGLYPHNO]OF INTEGER;
GLYPHCOLS:ARRAY[0..MAXGLYPHNO]OF INTEGER;
GLYPHROWS:ARRAY[0..MAXGLYPHNO]OF INTEGER;
COLSOFFSET:ARRAY[0..MAXGLYPHNO]OF INTEGER;
ROWSOFFSET:ARRAY[0..MAXGLYPHNO]OF INTEGER;BC,EC:INTEGER;
PXLDIRPTR:INTEGER;PXLMAG:INTEGER;{:59}{68:}A:INTEGER;M,N,O,P,Q:INTEGER;
BADCHAR:BOOLEAN;{:68}PROCEDURE INITIALIZE;VAR I:INTEGER;
BEGIN WRITELN(TTY,'This is GFtoPXL, Version 1.0');{15:}
FOR I:=0 TO 31 DO XCHR[I]:='?';XCHR[32]:=' ';XCHR[33]:='!';
XCHR[34]:='"';XCHR[35]:='#';XCHR[36]:='$';XCHR[37]:='%';XCHR[38]:='&';
XCHR[39]:='''';XCHR[40]:='(';XCHR[41]:=')';XCHR[42]:='*';XCHR[43]:='+';
XCHR[44]:=',';XCHR[45]:='-';XCHR[46]:='.';XCHR[47]:='/';XCHR[48]:='0';
XCHR[49]:='1';XCHR[50]:='2';XCHR[51]:='3';XCHR[52]:='4';XCHR[53]:='5';
XCHR[54]:='6';XCHR[55]:='7';XCHR[56]:='8';XCHR[57]:='9';XCHR[58]:=':';
XCHR[59]:=';';XCHR[60]:='<';XCHR[61]:='=';XCHR[62]:='>';XCHR[63]:='?';
XCHR[64]:='@';XCHR[65]:='A';XCHR[66]:='B';XCHR[67]:='C';XCHR[68]:='D';
XCHR[69]:='E';XCHR[70]:='F';XCHR[71]:='G';XCHR[72]:='H';XCHR[73]:='I';
XCHR[74]:='J';XCHR[75]:='K';XCHR[76]:='L';XCHR[77]:='M';XCHR[78]:='N';
XCHR[79]:='O';XCHR[80]:='P';XCHR[81]:='Q';XCHR[82]:='R';XCHR[83]:='S';
XCHR[84]:='T';XCHR[85]:='U';XCHR[86]:='V';XCHR[87]:='W';XCHR[88]:='X';
XCHR[89]:='Y';XCHR[90]:='Z';XCHR[91]:='[';XCHR[92]:='\';XCHR[93]:=']';
XCHR[94]:='↑';XCHR[95]:='_';XCHR[96]:='`';XCHR[97]:='a';XCHR[98]:='b';
XCHR[99]:='c';XCHR[100]:='d';XCHR[101]:='e';XCHR[102]:='f';
XCHR[103]:='g';XCHR[104]:='h';XCHR[105]:='i';XCHR[106]:='j';
XCHR[107]:='k';XCHR[108]:='l';XCHR[109]:='m';XCHR[110]:='n';
XCHR[111]:='o';XCHR[112]:='p';XCHR[113]:='q';XCHR[114]:='r';
XCHR[115]:='s';XCHR[116]:='t';XCHR[117]:='u';XCHR[118]:='v';
XCHR[119]:='w';XCHR[120]:='x';XCHR[121]:='y';XCHR[122]:='z';
XCHR[123]:='{';XCHR[124]:='|';XCHR[125]:='}';XCHR[126]:='~';
FOR I:=127 TO 255 DO XCHR[I]:='?';{:15}{16:}
FOR I:=0 TO 127 DO XORD[CHR(I)]:=32;
FOR I:=32 TO 126 DO XORD[XCHR[I]]:=I;{:16}{40:}TOTALCHARS:=0;{:40}{60:}
CHARCODE:=0;WHILE CHARCODE<=MAXGLYPHNO DO BEGIN GLYPHCOLS[CHARCODE]:=0;
GLYPHROWS[CHARCODE]:=0;COLSOFFSET[CHARCODE]:=0;ROWSOFFSET[CHARCODE]:=0;
GLYPHPTR[CHARCODE]:=0;CHARCODE:=CHARCODE+1;END;BC:=MAXGLYPHNO+1;EC:=-1;
{:60}END;{:4}{8:}PROCEDURE JUMPOUT;BEGIN GOTO 9999;END;{:8}{9:}
PROCEDURE PRINTSCALED(S:INTEGER);VAR DELTA:INTEGER;
BEGIN IF S<0 THEN BEGIN WRITE(TTY,'-');S:=-S;END;
WRITE(TTY,S DIV 65536:1);S:=10*(S MOD 65536)+5;
IF S<>5 THEN BEGIN DELTA:=10;WRITE(TTY,'.');
REPEAT IF DELTA>65536 THEN S:=S+32768-(DELTA DIV 2);
WRITE(TTY,CHR(ORD('0')+(S DIV 65536)));S:=10*(S MOD 65536);
DELTA:=DELTA*10;UNTIL S<=DELTA;END;END;{:9}{11:}
FUNCTION LOWERCASIFY(C:ASCIICODE):ASCIICODE;
BEGIN IF(C>=65)AND(C<=90)THEN LOWERCASIFY:=C+32 ELSE LOWERCASIFY:=C;END;
{:11}{26:}PROCEDURE OPENGFFILE;BEGIN RESET(GFFILE,'','/B:8');CURLOC:=0;
END;{:26}{27:}PROCEDURE OPENPXLFILE;BEGIN REWRITE(PXLFILE,'','/B:8');
END;{:27}{29:}FUNCTION GETBYTE:INTEGER;VAR B:EIGHTBITS;
BEGIN IF EOF(GFFILE)THEN GETBYTE:=0 ELSE BEGIN READ(GFFILE,B);
CURLOC:=CURLOC+1;GETBYTE:=B;END;END;FUNCTION SIGNEDBYTE:INTEGER;
VAR B:EIGHTBITS;BEGIN READ(GFFILE,B);CURLOC:=CURLOC+1;
IF B<128 THEN SIGNEDBYTE:=B ELSE SIGNEDBYTE:=B-256;END;
FUNCTION GETTWOBYTES:INTEGER;VAR A,B:EIGHTBITS;BEGIN READ(GFFILE,A);
READ(GFFILE,B);CURLOC:=CURLOC+2;GETTWOBYTES:=A*256+B;END;
FUNCTION SIGNEDPAIR:INTEGER;VAR A,B:EIGHTBITS;BEGIN READ(GFFILE,A);
READ(GFFILE,B);CURLOC:=CURLOC+2;
IF A<128 THEN SIGNEDPAIR:=A*256+B ELSE SIGNEDPAIR:=(A-256)*256+B;END;
FUNCTION GETTHREEBYTE:INTEGER;VAR A,B,C:EIGHTBITS;BEGIN READ(GFFILE,A);
READ(GFFILE,B);READ(GFFILE,C);CURLOC:=CURLOC+3;
GETTHREEBYTE:=(A*256+B)*256+C;END;FUNCTION SIGNEDTRIO:INTEGER;
VAR A,B,C:EIGHTBITS;BEGIN READ(GFFILE,A);READ(GFFILE,B);READ(GFFILE,C);
CURLOC:=CURLOC+3;
IF A<128 THEN SIGNEDTRIO:=(A*256+B)*256+C ELSE SIGNEDTRIO:=((A-256)*256+
B)*256+C;END;FUNCTION SIGNEDQUAD:INTEGER;VAR A,B,C,D:EIGHTBITS;
BEGIN READ(GFFILE,A);READ(GFFILE,B);READ(GFFILE,C);READ(GFFILE,D);
CURLOC:=CURLOC+4;
IF A<128 THEN SIGNEDQUAD:=((A*256+B)*256+C)*256+D ELSE SIGNEDQUAD:=(((A
-256)*256+B)*256+C)*256+D;END;{:29}{30:}
PROCEDURE PXLHALFWORD(W:INTEGER);BEGIN IF W<0 THEN W:=W+65536;
BEGIN WRITE(PXLFILE,W DIV 256);PXLBYTENO:=PXLBYTENO+1;END;
BEGIN WRITE(PXLFILE,W MOD 256);PXLBYTENO:=PXLBYTENO+1;END;END;
PROCEDURE PXLWORD(W:INTEGER);
BEGIN IF W>0 THEN BEGIN WRITE(PXLFILE,W DIV 16777216);
PXLBYTENO:=PXLBYTENO+1;END ELSE BEGIN W:=W+1073741824;W:=W+1073741824;
BEGIN WRITE(PXLFILE,(W DIV 16777216)+128);PXLBYTENO:=PXLBYTENO+1;END;
END;BEGIN WRITE(PXLFILE,(W DIV 65536)MOD 256);PXLBYTENO:=PXLBYTENO+1;
END;BEGIN WRITE(PXLFILE,(W DIV 256)MOD 256);PXLBYTENO:=PXLBYTENO+1;END;
BEGIN WRITE(PXLFILE,W MOD 256);PXLBYTENO:=PXLBYTENO+1;END;END;{:30}{31:}
FUNCTION GFLENGTH:INTEGER;BEGIN SETPOS(GFFILE,-1);
GFLENGTH:=CURPOS(GFFILE);END;PROCEDURE MOVETOBYTE(N:INTEGER);
BEGIN SETPOS(GFFILE,N);CURLOC:=N;END;{:31}{41:}
FUNCTION FIRSTPAR(O:EIGHTBITS):INTEGER;
BEGIN CASE O OF 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,
22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63:FIRSTPAR:=O-0;
64,69,246,241:FIRSTPAR:=GETBYTE;65,70,242:FIRSTPAR:=GETTWOBYTES;
66,71,243:FIRSTPAR:=GETTHREEBYTE;72,244,245:FIRSTPAR:=SIGNEDQUAD;
240,67,68,247,248,249,250,251,252,253,254,255:FIRSTPAR:=0;
73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,
97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115
,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133
,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151
,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169
,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187
,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205
,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223
,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239:
FIRSTPAR:=O-156;END;END;{:41}{42:}FUNCTION DOCHAR:BOOLEAN;
LABEL 1,2,3,4,9997,9998,9999;VAR O:EIGHTBITS;P,Q:INTEGER;I,J:INTEGER;
B:EIGHTBITS;BEGIN DOCHAR:=TRUE;WHILE TRUE DO{43:}BEGIN A:=CURLOC;
O:=GETBYTE;P:=FIRSTPAR(O);
IF EOF(GFFILE)THEN BEGIN WRITE(TTY,' ','Bad GF file: ',
'the file ended prematurely','!');JUMPOUT;END;{44:}IF O<=67 THEN{48:}
BEGIN IF X+P>RIGHTPIXEL THEN BEGIN IF X<=RIGHTPIXEL THEN BEGIN WRITE(TTY
,A:1,': ! ','character extends too far to the right for me');
WRITELN(TTY);END;X:=X+P;
END ELSE WHILE P>0 DO BEGIN IMAGEARRAY[Y,X]:=PAINTSWITCH;X:=X+1;P:=P-1;
END;IF PAINTSWITCH=1 THEN PAINTSWITCH:=0 ELSE PAINTSWITCH:=1;END{:48}
ELSE IF(72<=O)AND(O<=239)THEN{49:}BEGIN Y:=Y-1;Z:=Z+P;X:=Z;
PAINTSWITCH:=1;END{:49}ELSE CASE O OF 69,70,71:{50:}BEGIN Y:=Y-(P+1);
X:=Z;PAINTSWITCH:=1;END{:50};{45:}240:;
247:BEGIN BEGIN WRITE(TTY,A:1,': ! ','preamble command within a page!');
WRITELN(TTY);END;GOTO 9998;END;248,249:BEGIN BEGIN WRITE(TTY,A:1,': ! ',
'postamble command within a page!');WRITELN(TTY);END;GOTO 9998;END;
67:BEGIN BEGIN WRITE(TTY,A:1,': ! ','boc occurred before eoc');
WRITELN(TTY);END;GOTO 9998;END;68:GOTO 9999;{:45}241,242,243,244:{46:}
BEGIN BADCHAR:=FALSE;WHILE P>0 DO BEGIN Q:=GETBYTE;
IF(Q<32)OR(Q>126)THEN BADCHAR:=TRUE;P:=P-1;END;
IF BADCHAR THEN BEGIN WRITE(TTY,A:1,': ! ',
'non-ASCII character in xxx command!');WRITELN(TTY);END;END{:46};
245:{47:}{:47};
OTHERS:BEGIN WRITE(TTY,A:1,': ! ','undefined command ',O:1,'!');
WRITELN(TTY);END END{:44};END{:43};9998:WRITELN(TTY,'!');DOCHAR:=FALSE;
GOTO 9997;9999:{51:}{WRITELN(TTY);
WRITELN(TTY,'before: minx=',MINX:1,' maxx=',MAXX:1,' miny=',MINY:1,
' maxy=',MAXY:1);}Y:=MINY;WHILE Y<=MAXY DO BEGIN X:=MINX;
WHILE X<=MAXX DO BEGIN IF IMAGEARRAY[Y,X]=1 THEN GOTO 1;X:=X+1;END;
Y:=Y+1;MINY:=Y;END;1:IF(MINY>MAXY)THEN BEGIN MINX:=MAXX+1;GOTO 4;END;
Y:=MAXY;WHILE Y>MINY DO BEGIN X:=MINX;
WHILE X<=MAXX DO BEGIN IF IMAGEARRAY[Y,X]=1 THEN GOTO 2;X:=X+1;END;
Y:=Y-1;MAXY:=Y;END;2:X:=MINX;WHILE X<MAXX DO BEGIN Y:=MINY;
WHILE Y<=MAXY DO BEGIN IF IMAGEARRAY[Y,X]=1 THEN GOTO 3;Y:=Y+1;END;
X:=X+1;MINX:=X;END;3:X:=MAXX;WHILE X>MINX DO BEGIN Y:=MINY;
WHILE Y<=MAXY DO BEGIN IF IMAGEARRAY[Y,X]=1 THEN GOTO 4;Y:=Y+1;END;
X:=X-1;MAXX:=X;END;4:COLS:=MAXX-MINX+1;ROWS:=MAXY-MINY+1;
COLSOFFSET[CHARCODE]:=-MINX;ROWSOFFSET[CHARCODE]:=MAXY;
NUMBYTES:=4*((COLS+31)DIV 32);
{WRITELN(TTY,'after : minx=',MINX:1,' maxx=',MAXX:1,' miny=',MINY:1,
' maxy=',MAXY:1);WRITELN(TTY,'cols=',COLS:1,' rows=',ROWS:1);}{:51};
{61:}GLYPHCOLS[CHARCODE]:=COLS;GLYPHROWS[CHARCODE]:=ROWS;
COLSOFFSET[CHARCODE]:=0;{:61}{64:}
IF GLYPHPTR[CHARCODE]<>0 THEN BEGIN WRITE(TTY,A:1,': ! ',
'Duplicate glyph');WRITELN(TTY);END;GLYPHPTR[CHARCODE]:=PXLBYTENO DIV 4;
{WRITELN(TTY);[38:]BEGIN Y:=MAXY;
WHILE(Y>=MINY)AND(Y>=MAXY-80)DO BEGIN X:=MINX;
WHILE(X<=MAXX)AND(X<=MINX+78)DO BEGIN IF IMAGEARRAY[Y,X]=0 THEN WRITE(
TTY,' ')ELSE WRITE(TTY,'*');X:=X+1;END;WRITELN(TTY,' ');Y:=Y-1;END;
END[:38];}Y:=MAXY;WHILE(Y>=MINY)DO BEGIN X:=MINX;
FOR J:=1 TO NUMBYTES DO BEGIN IF X<(MAXX-7)THEN{65:}
BEGIN B:=IMAGEARRAY[Y,X];X:=X+1;
FOR I:=2 TO 8 DO BEGIN B:=B*2+IMAGEARRAY[Y,X];X:=X+1;END;
BEGIN WRITE(PXLFILE,B);PXLBYTENO:=PXLBYTENO+1;END;END{:65}
ELSE IF(X>MAXX)THEN BEGIN WRITE(PXLFILE,0);PXLBYTENO:=PXLBYTENO+1;
END ELSE{66:}BEGIN B:=IMAGEARRAY[Y,X];X:=X+1;I:=2;
WHILE X<=MAXX DO BEGIN B:=B*2+IMAGEARRAY[Y,X];X:=X+1;I:=I+1;END;
FOR I:=I TO 8 DO B:=B*2;BEGIN WRITE(PXLFILE,B);PXLBYTENO:=PXLBYTENO+1;
END;END{:66};END;IF(PXLBYTENO MOD 4)<>0 THEN BEGIN WRITE(TTY,A:1,': ! ',
'Mod 4 error in |encode_glyph|');WRITELN(TTY);END;Y:=Y-1 END;{:64};
9997:END;{:42}{53:}PROCEDURE READPOSTAMBL;VAR K:INTEGER;P,Q,M,C:INTEGER;
BEGIN POSTLOC:=CURLOC-1;
WRITELN(TTY,'Postamble starts at byte ',POSTLOC:1,'.');P:=SIGNEDQUAD;
DESIGNSIZE:=SIGNEDQUAD;CHECKSUM:=SIGNEDQUAD;
WRITE(TTY,'design size = ',DESIGNSIZE:1,' (');
PRINTSCALED(DESIGNSIZE DIV 16);WRITELN(TTY,')');
WRITELN(TTY,'check sum = ',CHECKSUM:1);HPPP:=SIGNEDQUAD;
VPPP:=SIGNEDQUAD;WRITE(TTY,'hppp = ',HPPP:1,' (');PRINTSCALED(HPPP);
WRITELN(TTY,')');WRITE(TTY,'vppp = ',VPPP:1,' (');PRINTSCALED(VPPP);
WRITELN(TTY,')');MAGNIFICATIO:=HPPP/(65536.0*200.0/72.27);
PXLMAG:=ROUND(1000*MAGNIFICATIO);WRITELN(TTY,'mag = ',PXLMAG:1);
MINX:=SIGNEDQUAD;MAXX:=SIGNEDQUAD;MINY:=SIGNEDQUAD;MAXY:=SIGNEDQUAD;
WRITELN(TTY,'min x = ',MINX:1,', max x = ',MAXX:1);
WRITELN(TTY,'min y = ',MINY:1,', max y = ',MAXY:1);{56:}
REPEAT K:=GETBYTE;IF K=246 THEN BEGIN C:=FIRSTPAR(K);
IF C>MAXGLYPHNO THEN BEGIN WRITE(TTY,' ','Character number',C,
' exceeds 127');JUMPOUT;END;DEVICEWIDTH[C]:=SIGNEDQUAD;
TFMWIDTH[C]:=SIGNEDQUAD;P:=SIGNEDQUAD;K:=240;END;UNTIL K<>240;{:56};
{55:}IF K<>249 THEN BEGIN WRITE(TTY,A:1,': ! ','should be postpost!');
WRITELN(TTY);END;Q:=SIGNEDQUAD;
IF Q<>POSTLOC THEN BEGIN WRITE(TTY,A:1,': ! ',
'postamble pointer should be ',POSTLOC:1,' not ',Q:1);WRITELN(TTY);END;
M:=GETBYTE;IF M<>129 THEN BEGIN WRITE(TTY,A:1,': ! ',
'identification byte should be ',129:1);WRITELN(TTY);END;K:=CURLOC;
M:=223;WHILE(M=223)AND NOT EOF(GFFILE)DO M:=GETBYTE;
IF NOT EOF(GFFILE)THEN BEGIN WRITE(TTY,' ','Bad GF file: ',
'signature in byte ',CURLOC-1:1,' should be 223','!');JUMPOUT;
END ELSE IF CURLOC<K+4 THEN BEGIN WRITE(TTY,A:1,': ! ',
'not enough signature bytes at end of file');WRITELN(TTY);END;{:55};END;
{:53}{57:}PROCEDURE FINDPOSTAMBL;VAR Q,K:INTEGER;
BEGIN POSTLOC:=GFLENGTH-4;
REPEAT IF POSTLOC=0 THEN BEGIN WRITE(TTY,' ','Bad GF file: ','all 223s',
'!');JUMPOUT;END;MOVETOBYTE(POSTLOC);K:=GETBYTE;POSTLOC:=POSTLOC-1;
UNTIL K<>223;
IF K<>129 THEN BEGIN WRITE(TTY,' ','Bad GF file: ','ID byte is ',K:1,'!'
);JUMPOUT;END;MOVETOBYTE(POSTLOC-3);Q:=SIGNEDQUAD;
IF(Q<0)OR(Q>POSTLOC-3)THEN BEGIN WRITE(TTY,' ','Bad GF file: ',
'post pointer ',Q:1,' at byte ',POSTLOC-3:1,'!');JUMPOUT;END;
MOVETOBYTE(Q);K:=GETBYTE;
IF K<>248 THEN BEGIN WRITE(TTY,' ','Bad GF file: ','byte ',Q:1,
' is not post','!');JUMPOUT;END;END;{:57}{67:}BEGIN INITIALIZE;
OPENGFFILE;FINDPOSTAMBL;READPOSTAMBL;OPENGFFILE;{69:}O:=GETBYTE;
IF O<>247 THEN BEGIN WRITE(TTY,' ','Bad GF file: ',
'First byte isn''t start of preamble!','!');JUMPOUT;END;O:=GETBYTE;
IF O<>129 THEN BEGIN WRITE(TTY,A:1,': ! ',
'identification byte should be ',129:1,' not ',O:1,'!');WRITELN(TTY);
END;O:=GETBYTE;WRITE(TTY,'''');WHILE O>0 DO BEGIN O:=O-1;
WRITE(TTY,XCHR[GETBYTE]);END;WRITELN(TTY,'''');{:69};OPENPXLFILE;{62:}
PXLBYTENO:=0;PXLWORD(1001);{WRITELN(TTY,'Start of PXL info');}{:62}{70:}
REPEAT{71:}REPEAT A:=CURLOC;O:=GETBYTE;P:=FIRSTPAR(O);
IF EOF(GFFILE)THEN BEGIN WRITE(TTY,' ','Bad GF file: ',
'the file ended prematurely','!');JUMPOUT;END;IF O=245 THEN BEGIN{47:}
{:47};O:=240;END ELSE IF(O>=241)AND(O<=244)THEN BEGIN{46:}
BEGIN BADCHAR:=FALSE;WHILE P>0 DO BEGIN Q:=GETBYTE;
IF(Q<32)OR(Q>126)THEN BADCHAR:=TRUE;P:=P-1;END;
IF BADCHAR THEN BEGIN WRITE(TTY,A:1,': ! ',
'non-ASCII character in xxx command!');WRITELN(TTY);END;END{:46};O:=240;
END;UNTIL O<>240;{:71};
IF O<>248 THEN BEGIN IF O<>67 THEN BEGIN WRITE(TTY,' ','Bad GF file: ',
'byte ',CURLOC-1:1,' is not boc (',O:1,')','!');JUMPOUT;END;{72:}
A:=CURLOC;CHARCODE:=GETTWOBYTES;CHARCODE:=GETTWOBYTES;
WRITE(TTY,'[',CHARCODE:1);
IF CHARCODE>MAXGLYPHNO THEN BEGIN WRITE(TTY,' ',
'Character number too large');JUMPOUT;END;
IF CHARCODE>EC THEN EC:=CHARCODE;IF CHARCODE<BC THEN BC:=CHARCODE;
P:=SIGNEDQUAD;MINX:=SIGNEDQUAD;MAXX:=SIGNEDQUAD;MINY:=SIGNEDQUAD;
MAXY:=SIGNEDQUAD;
IF MINX<LEFTPIXEL THEN BEGIN WRITE(TTY,' ','Pixels beyond left limit');
JUMPOUT;END;
IF MAXX>RIGHTPIXEL THEN BEGIN WRITE(TTY,' ','Pixels beyond right limit')
;JUMPOUT;END;
IF MINY<BOTPIXEL THEN BEGIN WRITE(TTY,' ','Pixels beyond bottom limit');
JUMPOUT;END;
IF MAXY>TOPPIXEL THEN BEGIN WRITE(TTY,' ','Pixels beyond top limit');
JUMPOUT;END;Z:=SIGNEDQUAD;
IF(Z>MAXX)OR(Z<MINX)THEN BEGIN WRITE(TTY,A:1,': ! ',
'Parameter z is out of range');WRITELN(TTY);END;{37:}BEGIN Y:=MINY;
WHILE Y<=MAXY DO BEGIN X:=MINX;
WHILE X<=MAXX DO BEGIN IMAGEARRAY[Y,X]:=0;X:=X+1;END;Y:=Y+1;END;END{:37}
;Y:=MAXY;X:=Z;PAINTSWITCH:=1;{:72};
IF NOT DOCHAR THEN BEGIN WRITE(TTY,' ','Bad GF file: ',
'char ended unexpectedly','!');JUMPOUT;END;WRITE(TTY,']');
TOTALCHARS:=TOTALCHARS+1;IF(TOTALCHARS MOD 10)=0 THEN WRITELN(TTY);
END UNTIL O=248;{:70};WRITELN(TTY);{63:}
IF(PXLBYTENO MOD 4)<>0 THEN BEGIN WRITE(TTY,' ',
'This can''t happen: alignment');JUMPOUT;END;PXLDIRPTR:=PXLBYTENO DIV 4;
FOR CHARCODE:=0 TO MAXGLYPHNO DO BEGIN PXLHALFWORD(GLYPHCOLS[CHARCODE]);
PXLHALFWORD(GLYPHROWS[CHARCODE]);PXLHALFWORD(COLSOFFSET[CHARCODE]);
PXLHALFWORD(ROWSOFFSET[CHARCODE]);PXLWORD(GLYPHPTR[CHARCODE]);
PXLWORD(TFMWIDTH[CHARCODE]);END;PXLWORD(CHECKSUM);PXLWORD(PXLMAG);
PXLWORD(DESIGNSIZE);PXLWORD(PXLDIRPTR);PXLWORD(1001);
{WRITELN(TTY,'End of PXL info');}{:63}
WRITE(TTY,'Font had ',TOTALCHARS:1,' character');
IF TOTALCHARS<>1 THEN WRITE(TTY,'s');WRITE(TTY,' altogether');
9999:END.{:67}